img http://blacklight.gotdns.org/ Il nostro amico jeco, qualche giorno fa, nel commentare un articolo ci ha lasciato una chicca veramente imperdibile. Onde poter dare a questo hack una maggiore visibilità abbiamo deciso di riportare il commento di jeco sotto forma di un articolo. Attraverso un sagace uso di vari comandi potremo elencare tutti i file musicali MP3 presenti nella cartella Musica/ sulla home di un utente e, dopo averli trasformati in maiuscolo, aver tolto loro l'estensione e aver scritto l'elenco su un file, spedire in una mail l'elenco come corpo del messaggio sulla posta locale dell'utente.
(L'articolo in questione potete trovarlo qui) ... volete un hack ... eccovi serviti: find ~/Musica -iname "*.mp3" -print0 | xargs -i -0 basename {} | tr [a-z] [A-Z] | sed 's/.MP3//' | sort | tee ~/elenco-musica-mp3.txt | mail -s "Elenco brani musicali personali (mp3)" `whoami` Analizziamo l'hack che ho scritto prima e componiamo il comando ogni qualvolta vediamo una pipe (segno |): 1) find ~/Musica -iname "*.mp3" -print0 2) xargs -i -0 basename {} 3) tr [a-z] [A-Z] 4) sed 's/.MP3//' 5) sort 6) tee ~/elenco-musica-mp3.txt 7) mail -s "Elenco brani musicali personali (mp3)" `whoami` Iniziamo. Il punto 1) genera una lista di file presenti nella cartella ~/Musica che finiscono con l'estensione .mp3, indifferentemente dalle maiuscole o dalle minuscole che compongono il nome del file (parametro -iname). Per il momento prendiamo per buona l'opzione -print0 che serve per legare il successivo comando xargs in maniera corretta. Apriamo una parentesi sull'utuilizzo del pipe (|): questo, vero e proprio comando serve catturare lo STDOUT del comando di sinistra e direzionarlo nello STDIN del comando di destra. Il punto 2) preleva la lista generata al punto 1) e con il parametro -0 (che si lega al precedente parametro -print0), termina le stringhe (cioè nomi dei files che scorrono ipoteticamente) in ingresso con il carattere NULL. Il punto 2) inoltre, usando l'istruzione basename, scrive solo il nome del file (esempio se scrivessi `basename /etc/xinetd.conf' l comando restituisce xinetd.conf). Le parentesi graffe {} identificano le varie stringhe in ingresso (parametro -i). Il punto 3) trasforma l'intera riga in maiuscolo. Il punto 4) elimina l'estensione .MP3 che solo ora è stata sicuramente trasformata in maiuscolo. Il punto 5) ordina l'intera lista. Il punto 6) divide il flusso STDOUT del punto 5) in due canali: il primo canale si riversa nello STDIN del comando successivo e il secondo canale va a finire nel file ~/elenco-musica-mp3.txt. Il carattere tilde ~ identifica la home dell'utente (in pratica corrisponde alla variabile $HOME). Infine il punto 7) invia una mail che ha come oggetto la stringa specificata dopo il paramentro -s. La lista dei recipients a cui inviare la mail è costituira dell'istrizione `whoami che restituisce il nome utente. Il corpo del messaggio è costituito dello STDIN che arriva al comando. Perfetto, abbiamo finito il nostro hack. Ultima cosa, di ogni comando è possibile eseguire una man che restituisce l'elenco intero dei parametri possibili. :-)
|